package algorithm;

/**
 * 假设市场上每只股票不同天的价格会波动，但是当天价格恒定，如600570（恒生电子），连续几天价格为50,55,60,58，如果我们在50买入，大于50卖出就可以获得盈利。
 * 现提供起始资金M，并告知连续天的价格，计算出最多能盈利多少钱
 * 输入：10000
 * 3
 * 1,2,1
 * 输出：10000
 * 注解：
 * 1.1000为起始资金，3为价格天数，后续为具体的3天的价格
 * 2.1元买入，得10000股，此时2元卖出的20000元，所以盈利=20000-10000=10000
 *
 * 1.价格都为整数，金额或能买到股数在计算过程中以double处理，无需关心精度，得到的结果直接取整使用即可
 * 2.不考虑买卖股票的手续费用
 * 3.必然能买到或卖出
 * 4.每天只有一次出手机会，即每日最多只能做一次买或卖的操作。
 * 5.低买高卖才能赚钱
 */
public class 最大盈利 {

    public static void main(String[] args) {
        int[] prices = {50, 51, 48, 53, 59, 49, 51};
        System.out.println("盈利：" + getMaxProfit(100, prices));
    }

    /**
     * 最大利润
     *
     * @param amt    本金
     * @param prices 股价变化
     * @return 利润
     */
    private static double getMaxProfit(int amt, int[] prices) {
        if (prices.length < 2) {
            throw new IllegalArgumentException("价格天数需要大于1天");
        }
        getIndex(prices);
        return 0;
    }

    private static void getIndex(int[] prices) {
        int minIndex = 0;
        int minPrice = prices[0];
        int maxIndex = prices.length - 1;
        int maxPrice = prices[prices.length - 1];
        int maxDifference = prices[prices.length - 1] - prices[0];
        for (int i = 1; i < prices.length; i++) {
            for (int j = prices.length - 1; j > 0; j--) {
                if (i >= j) {
                    break;
                }
                if (maxDifference > prices[j] - prices[i]) {
                    maxDifference = prices[j] - prices[i];
                    minIndex = i;
                    maxIndex = j;
                    minPrice = prices[i];
                    maxPrice = prices[j];
                }
            }
        }
        System.out.println("maxPrice:" + maxPrice);
        System.out.println("minPrice:" + minPrice);
    }
}
